using System.Windows;
using System.Windows.Controls;
using WPF_MVVM_Test.MVVM_ViewModel;

namespace WPF_MVVM_Test
{
    /// <summary>
    /// MainWindow的代码后置文件 - MVVM模式中View层的代码部分
    /// 
    /// 设计原则：
    /// 1. 尽量减少代码后置文件中的逻辑
    /// 2. 只处理纯粹的UI相关操作
    /// 3. 不包含业务逻辑
    /// 4. 主要用于处理一些无法通过数据绑定解决的UI问题
    /// 
    /// 为什么需要代码后置文件：
    /// 1. 处理PasswordBox的密码绑定（WPF的安全限制）
    /// 2. 处理一些特殊的UI交互逻辑
    /// 3. 初始化界面组件
    /// </summary>
    public partial class MainWindow : Window
    {
        /// <summary>
        /// 构造函数：初始化主窗口
        /// 
        /// 为什么要在构造函数中处理：
        /// 1. 确保界面组件完全初始化后再设置事件处理
        /// 2. 建立PasswordBox与ViewModel的连接
        /// </summary>
        public MainWindow()
        {
            // 初始化组件：这是WPF自动生成的代码，加载XAML定义的界面
            InitializeComponent();
            
            // 为PasswordBox添加密码变更事件处理
            // 为什么需要这样做：
            // 1. PasswordBox的Password属性出于安全考虑，不支持数据绑定
            // 2. 必须通过事件来手动同步密码值到ViewModel
            // 3. 这是WPF中处理密码输入的标准做法
            PasswordBox.PasswordChanged += PasswordBox_PasswordChanged;
        }

        /// <summary>
        /// PasswordBox密码变更事件处理方法
        /// 
        /// 作用：当用户在密码框中输入时，将密码值同步到ViewModel
        /// 
        /// 为什么这样设计：
        /// 1. 保持MVVM模式的数据流向：View -> ViewModel
        /// 2. 确保ViewModel能够获取到最新的密码值
        /// 3. 支持登录验证功能的正常运行
        /// </summary>
        /// <param name="sender">触发事件的对象（PasswordBox）</param>
        /// <param name="e">事件参数</param>
        private void PasswordBox_PasswordChanged(object sender, RoutedEventArgs e)
        {
            // 类型安全检查：确保DataContext确实是MainWindowViewModel类型
            // 为什么要检查：
            // 1. 避免类型转换异常
            // 2. 确保代码的健壮性
            // 3. 支持设计时和运行时的不同DataContext
            if (DataContext is MainWindowViewModel vm)
            {
                // 将PasswordBox的密码值赋给ViewModel的Password属性
                // 这样ViewModel就能获取到用户输入的密码了
                vm.Password = PasswordBox.Password;
            }
        }
    }
}